package com.ws.dll.impl;

import com.sun.jna.Library;
import com.sun.jna.Native;
import com.sun.jna.Pointer;
import com.sun.jna.WString;

/*
 * MIS-POS程序调用
 */
public interface MisDllJna extends Library {

	MisDllJna instanceDll = (MisDllJna) Native.loadLibrary("mispos_hs",
			MisDllJna.class);

	/**
	 * 设置通讯模式
	 * @param comtype
	 * @return
	 */
	public int com_typeset(int comtype);

	/**
	 * 设置通信的串口和速率
	 * @param iCom
	 * @param iBaud
	 * @return
	 */
	public int com_setup(int iCom, long iBaud);

	/**
	 * 设置通讯的ip地址函数
	 * @param iPort
	 * @param iIpaddr
	 * @return
	 */
	public int com_IPset(int iPort, String iIpaddr);

	/**
	 * 签到
	 * @param app_name 应用渠道名 用于区分多应用版本
	 * @param rspData 响应数据
	 * @return
	 */
	public int checkin_trans(String app_name, StringByReference rspData);

	/**
	 * 银行卡余额查询
	 * @param app_name 应用渠道名 用于区分多应用版本
	 * @param rspData 响应数据
	 * @return
	 */
	public int balance_trans(String app_name, StringByReference rspData);

	/**
	 * 消费
	 * @param app_name 应用渠道名 用于区分多应用版本
	 * @param amount 交易金额 12位ASCII，以分为单位，没有小数点
	 * @param rspData 响应数据
	 * @return
	 */
	public int sale_trans(String app_name, String amount, StringByReference rspData);

	/**
	 * 消费撤销
	 * @param app_name 应用渠道名 用于区分多应用版本
	 * @param org_traceno 原交易凭证号,6位字节，默认‘000000’，则pos机终端输入
	 * @param amount 交易金额 12位ASCII，以分为单位，没有小数点
	 * @param rspData 响应数据
	 * @return
	 */
	public int void_trans(String app_name, String org_traceno, String amount,
						  StringByReference rspData);

	/**
	 * 预授权
	 * @param app_name 应用渠道名
	 * @param amount 交易金额， 分
	 * @param rsp_data 响应数据
	 * @return 通讯码
	 */
	public int pre_trans(String app_name, String amount,
						  StringByReference rsp_data);

	/**
	 * 预授权撤销
	 * @param app_name 应用渠道名
	 * @param amount 交易金额	12位ASCII，以分为单位，没有小数点
	 * @param auno 原预授权码	6位字节
	 * @param oldtransdate 原交易日期	格式：MMDD，默认‘0000’，则由pos机上输入
	 * @param org_traceno 原交易凭证号	6位字节，默认‘000000’，则pos机终端输入
	 * @param rsp_data	响应数据	格式如2.1.3章节
	 * @return
	 */
	public int preVoid_trans(String app_name, String amount,String auno, String oldtransdate, String org_traceno,
						  StringByReference rsp_data);
	/**
	 * 预授权完成
	 * @param app_name 应用渠道名
	 * @param amount 交易金额	12位ASCII，以分为单位，没有小数点
	 * @param auno 原预授权码	6位字节
	 * @param oldtransdate 原交易日期	格式：MMDD，默认‘0000’，则由pos机上输入
	 * @param rsp_data	响应数据	格式如2.1.3章节
	 * @return
	 */
	public int preCom_trans(String app_name, String amount,String auno, String oldtransdate,
							StringByReference rsp_data);

	/**
	 * 预授权完成撤销
	 * @param app_name 应用渠道名
	 * @param amount 交易金额	12位ASCII，以分为单位，没有小数点
	 * @param oldtransdate 原交易日期	格式：MMDD，默认‘0000’，则由pos机上输入
	 * @param rsp_data	响应数据	格式如2.1.3章节
	 * @return
	 */
	public int preComVoid_trans(String app_name, String oldtransdate,String amount,
							StringByReference rsp_data);

	/**
	 * 实名支付
	 * @param app_name 应用渠道名
	 * @param amount 交易金额	12位ASCII，以分为单位，没有小数点
	 * @param person_name 持卡人姓名	如果传入为空，则pos机终端输入
	 * @param pay_code 持卡人业务代码	业务代码，可能为身份证号或者手机号
	 * @param rsp_data	响应数据	格式如2.1.3章节
	 * @return
	 */
	public int payRname_trans(String app_name, String amount,String person_name, String pay_code,
							StringByReference rsp_data);


	/**
	 * 结算
	 * @param app_name 应用渠道名
	 * @param settle_fla 结算结果	‘1’：结算平；‘0’：结算不平
	 * @param rsp_data	响应数据	格式如2.1.3章节
	 * @return
	 */
	public int settle_trans(String app_name, String settle_fla, StringByReference rsp_data);


	/**
	 * 结算单重打印
	 * @param app_name 应用渠道名
	 * @param org_traceno 原交易凭证号	6位字节，默认‘000000’，则打印上一笔成功交易
	 * @param rsp_data	响应数据	格式如2.1.3章节
	 * @return
	 */
	public int print_reply_trans(String app_name, String org_traceno, StringByReference rsp_data);

	/**
	 * 交易结果查询
	 * @param app_name 应用渠道名
	 * @param org_traceno 原交易凭证号	6位字节，默认‘000000’，则查询上一笔成功交易
	 * @param rsp_data	响应数据	格式如2.1.3章节
	 * @return
	 */
	public int qry_trans(String app_name, String org_traceno, StringByReference rsp_data);

	/**
	 * 退货
	 * @param app_name 应用渠道名
	 * @param amount  交易金额	12位ASCII，以分为单位，没有小数点
	 * @param sys_eqno 原系统参考号	12位字节，对应“#5”标签
	 * @param sdate 原交易日期	格式：MMDD，默认‘0000’，则由pos机上输入
	 * @param rsp_data	响应数据	格式如2.1.3章节
	 * @return
	 */
	public int refund_trans(String app_name, String amount, String sys_eqno, String sdate, StringByReference rsp_data);


	/**
	 * 微信支付宝扫码付
	 * @param app_name	应用渠道名	用于区分多应用版本
	 * @param amount 	交易金额	12位ASCII，以分为单位，没有小数点
	 * @param zwno	微信支付宝条码	以客户端生成的为准，当此变量长度小于10字节则表示调用pos的扫码枪获取条码。
	 * @param rsp_data	响应数据	格式如2.1.3章节
	 * @return
	 */
	public int zw_trans(String app_name, String amount, String zwno, StringByReference rsp_data);

	/**
	 * 微信支付宝交易查询
	 * @param app_name	应用渠道名	用于区分多应用版本
	 * @param zwno	微信支付宝条码	以客户端生成的为准，当此变量长度小于10字节则表示调用pos的扫码枪获取条码。
	 * @param rsp_data	响应数据	格式如2.1.3章节
	 * @return
	 */
	public int zw_balance_trans(String app_name, String zwno, StringByReference rsp_data);

	/**
	 * 微信支付宝退款
	 * @param app_name	应用渠道名	用于区分多应用版本
	 * @param amount 	交易金额	12位ASCII，以分为单位，没有小数点
	 * @param zwno	微信支付宝条码	以客户端生成的为准，当此变量长度小于10字节则表示调用pos的扫码枪获取条码。
	 * @param rsp_data	响应数据	格式如2.1.3章节
	 * @return
	 */
	public int zw_refund_trans(String app_name, String amount, String zwno, StringByReference rsp_data);
}
